package com.code.test.first.str;

/**
 * https://github.com/youngyangyang04/leetcode-master/blob/master/problems/kama55.%E5%8F%B3%E6%97%8B%E5%AD%97%E7%AC%A6%E4%B8%B2.md
 * 字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k，请编写一个函数，将字符串中的后面 k 个字符移到字符串的前面，实现字符串的右旋转操作。
 * <p>
 * 例如，对于输入字符串 "abcdefg" 和整数 2，函数应该将其转换为 "fgabcde"。
 * <p>
 * 输入：输入共包含两行，第一行为一个正整数 k，代表右旋转的位数。第二行为字符串 s，代表需要旋转的字符串。
 * <p>
 * 输出：输出共一行，为进行了右旋转操作后的字符串。
 * <p>
 * 样例输入：
 * <p>
 * 2
 * abcdefg
 * 样例输出：
 * <p>
 * fgabcde
 * 数据范围：1 <= k < 10000, 1 <= s.length < 10000;
 */
public class Code55 {

    public static void main(String[] args) {
        String input = "abcdefg";
        input = reverseK(input, 2);
        System.out.println(input);

    }

    public static String reverseK(String input, int k) {
        int n = input.length();
        char[] ch = input.toCharArray();
        //全部翻转
        reverseString(ch, 0, n - 1);
        //翻转
        reverseString(ch, 0, k - 1);
        reverseString(ch, k, n - 1);
        return new String(ch);
    }

    public static String reverseString(char[] ch, int start, int end) {
        while (start < end) {
            char temp = ch[end];
            ch[end] = ch[start];
            ch[start] = temp;
            start++;
            end--;
        }
        return new String(ch);
    }


}
